home *** CD-ROM | disk | FTP | other *** search
-
- #ifndef __ABSTRACTCOLLECTOR__
- #define __ABSTRACTCOLLECTOR__
-
- //
- // MoreAEM is needed for the definition of TDescriptor
- //
- #include "MoreAEM.h"
-
- //
- // TObject is the base class for TAbstractCollector
- //
- #include "Object.h"
-
- //
- // TBehavior is the base class for TCollectorBehavior
- //
- #include "Behavior.h"
-
- class TAbstractScriptableObject;
- class TAbstractCollector;
- class TCollectorBehavior;
- class TMarkToken;
- class TAETransaction;
-
- #define clCollectorBehavior 11
-
- //========================================================================================
- // Classs TCollectorBehavior
- //========================================================================================
- class TCollectorBehavior : public TBehavior
- {
- public:
- DeclareSmallClassData(TCollectorBehavior, TBehavior);
-
- TCollectorBehavior* NextCollectorBehavior() const { return (TCollectorBehavior*)this->NextBehaviorOfClass(clCollectorBehavior); }
- TAbstractCollector* CollectorBehaviorOwner() const;
-
- virtual long CollectorRequestDynamicBehavior(const TAETransaction& t, long requestID, void* param = nil);
- };
-
- //========================================================================================
- // Classs TAbstractCollector
- //========================================================================================
-
- class TAbstractCollector : public TObject
- {
- private:
- TBehavior* fFirstBehavior;
-
- public:
- TAbstractCollector() : fFirstBehavior(nil) {}
- virtual ~TAbstractCollector();
-
- virtual TBehavior* FirstBehavior() const;
- virtual void SetFirstBehavior(TBehavior* firstBehavior);
-
- virtual void AddToCollection(TAbstractScriptableObject*) = 0;
- virtual TAbstractScriptableObject* CollectionResult() = 0;
-
- virtual long CollectorRequest(const TAETransaction& t, long requestID, void* param = nil);
- virtual long CollectorRequestDefaultBehavior(const TAETransaction& t, long requestID, void* param = nil);
-
- TCollectorBehavior* FirstCollectorBehavior() const { return (TCollectorBehavior*)this->FirstBehaviorOfClass(clCollectorBehavior); }
-
- };
-
- enum
- {
- kWaitForAsyncSearchesToComplete = 'wait', // Search engines that search asynchronously should
- // add a behavior that blocks the current thread when
- // this message is received
-
- kAsyncSearchesComplete = 'qdn?', // Search engines that search asynchonously should
- kAsyncSearchIsComplete = 'done', // attach a collection behavior that answers this question
- kAsyncSearchNotComplete = 'notd', // (kAsyncSearchesComplete) with either kAsyncSearchIsComplete or kAsyncSearchNotComplete
-
- kSearchShouldIterateBackwards = 'bak?', // Search engines with no defined sequence should ignore this
- kCollectionIsFull = 'stop', // Search engines should ask this question and abort if true is returned
-
- kUnknownCollectorRequest = 0x7FFFFFFF
- };
-
- //========================================================================================
- // Classs TObjectCollector
- //========================================================================================
-
- class TObjectCollector : public TAbstractCollector
- {
- private:
- TMarkToken* fCollection;
- TDescriptor fScopeOfSearch;
- unsigned char fCollectionFull; // Used to flag collection full when doing "first item whose" or "last item whose"
- unsigned char fIterateBackwards; // Used to do "last item"
-
- long fStartOfRange; // These three longwords are only used for implementing ranged
- long fEndOfRange; // whose clauses (rare), such as "items 10 through 20 whose..."
- long fNumberOfItemsAdded;
- unsigned long fPostProcessListStart; // These are used for special ranges (for example, middle or any)
- unsigned long fPostProcessListStop; // This indicates if just one item should be taken, or all after the
- // one specified by fPostProcessListStart should be used (for range: 1 to middle item, for example)
-
- public:
- TObjectCollector(TDescriptor scopeOfSearch);
-
- virtual void AddToCollection(TAbstractScriptableObject*);
- virtual long CollectorRequestDefaultBehavior(const TAETransaction& t, long requestID, void* param = nil);
- virtual TAbstractScriptableObject* CollectionResult();
-
- static void InterpretWhoseRangeEntry(TDescriptor rangeEntry, long& start, long& end, unsigned long& special);
- };
-
- #endif
-